#ifndef SCENE_H
#define SCENE_H

#include <list>

class Object;
class Camera;
class Light;


// Scene possui uma lista de objetos, de luzes e uma câmera.
// Ao ser desenhada, a cena deve aplicar as luzes, fazer a transformação de câmera e desenhar todos os objetos da lista

class Scene
{
public:
    Scene();

    void addObject(Object* obj);
    void addLight(Light* light);
    void setCamera(Camera* camera);

    // Remove o objeto da lista. Mas não deleta.
    void removeObject(Object* obj);
    // Remove a luz da lista. Mas não deleta.
    void removeLight(Light* light);

    Camera* getCamera();
    std::list<Object*> getObjects();
    std::list<Light*> getLights();

    void draw();

private:
    std::list<Object*> m_objects;
    std::list<Light*> m_lights;
    Camera *m_camera;
};

#endif // SCENE_H
